/*----------------------------------------------------------------
Copyright (c) 2003-2014 广东因豪信息科技有限公司版权所有。
"xdll.h"	字符识别模块接口
-----------------------------------------------------------------*/
#ifndef __KSENSE_XDLL_H_
#define __KSENSE_XDLL_H_

#ifdef __cplusplus
extern "C"
{
#endif

int ZZ_CreateLib(char* lpszSeriesNo, 
          int   nbEmbededFlag, 
          char* lpszModFileNames);

int ZZ_RecgTuxg(     int    uRecgFlags,
          int*   lpRecgCharsetIDs,
          int*   lpFormSubRectCbn,
          short* lpXis,
          short* lpYis,
          short* lpCis,
          int    lPointCount,
          int*   lpCodes, int* lpPssbs,
          int    nMaxCandCount,
          char*  lpHmodLegendDataCbz,
          int*   lp16TestLongsCbz);

int ZZ_DeleteLib();

#ifdef __cplusplus
}
#endif

#endif //__KSENSE_XDLL_H_


/*---------------------------------------------------------------------

逍遥笔手写识别SDK –API说明

逍遥笔手写识别SDK –API的调用，主要涉及3个API：

①ZZ_CreateLib()：构造函数，把模板文件装到内存。

②ZZ_DeleteLib()：析造函数，释放构造函数占用的内存。

③ZZ_RecgTuxg()： 识别函数，根据书写轨迹，得到候选字的内码和概率。



各个API调用的详细说明如下：

1、ZZ_CreateLib()

函数原型：extern "C" int _declspec(dllexport) ZZ_CreateLib(char* lpszSeriesNo,

           int   nbEmbededFlag,

           char* lpszModFileNames);

功能描述：创建模板库，将模板文件装入内存

参数说明：

  lpszSeriesNo：产品序列号,对于演示版本(demostration)置为NULL;

  nbEmbededFlag：嵌入式环境标识，如果应用在嵌入式环境中，则该标志位为1，否则为0

  lpszModFileNames：模板文件名;可以是1个或者多个;如果有多个文件，则它们之间用逗号(',')隔开;如果文件不是在当前目录,则必须都是全路径文件名

返回值说明：成功时返回1;出错时返回0;

VC调用示例：

假设模板文件都在目录"C:\PenDir"下，应用环境为Windows XP，则：

ZZ_CreateLib(NULL,0, "C:\\PenDir\\hci501.mrd,C:\\PenDir\\English.mrd");



2、ZZ_RecgTuxg()

函数原型：extern "C" int _declspec(dllexport) ZZ_RecgTuxg

(     int    uRecgFlags,

          int*   lpRecgCharsetIDs,

          int*   lpFormSubRectCbn,

          short* lpXis,

          short* lpYis,

          short* lpCis,

          int    lPointCount,

          int*   lpCodes, int* lpPssbs,

          int    nMaxCandCount,

          char*  lpHmodLegendDataCbz,

          int*   lp16TestLongsCbz);

功能描述：根据书写轨迹，得到候选字的内码和概率



参数说明：

uRecgFlags：置为0表示缺省的状态,lpCodes[]中返回的内码是"numcode";如果是0x20000000L(7个0),lpCodes[]返回的内码是Unicode;
lpRecgCharsetIDs[16]：前8个整数的含义如下(其余的8个保留):
ncsidHanzi――0(No Hanzi); 1(resv); 2(Big5); 3(GB1); 4(GB2312),5(GBK); 6(GB18030); 7(ExtB);
ncsidABC123――英文字母,数字等80个ASCI符号; 0x01(ABC), 0x02(123), 0x04(,;!);
ncsidKana―― 0(No Kana); 1(平假名和片假名,TotalKana);
ncsidHangul―― 0(No Hangul); 1(Hangul2000); 2(TotalHangul);
ncsidHangulZM―― 0(No Hangul字母); 1(With Hangul字母);
ncsidHangulSD―― 0(No Hangul声调); 1(With Hangul声调);
ncsidKanji―― 0(No Kanji); 1(J01); 2(J0); 3(J0+J1); 4(CJK);
ncsidHanja――0(No Hanja); 1(Rsv); 2(K0); 3(K0+K1); 4(CJK);
lpFormSubRectCbn：(Cbn: CanBeNull)全篇书写时的分割参数;置为NULL即可;
lpXis[lPointCount],lpYis[lPointCount],lpCis[lPointCount]：书写的轨迹; lpXis[i],lpYis[i]是第i个点的坐标;lpCis[i]是第i个点的标志位;如果第i个点是路径的终点,lpCis[i]=0x0001;否则lpCis[i] = 0;
lPointCount：待识别的轨迹上的点的个数;
lpCodes, lpPssbs：lpCodes是候选字内码，lpPssbs对应的概率
nMaxCandCount：输出候选字的最大个数，实际识别出的候选字可以小于这个数
lpHmodLegendDataCbz：返回词语联想所需要的数据;
lp16TestLongsCbz：内部参数
返回值说明：错误的时候返回-1;否则返回候选字的个数



VC调用示例：

#define MAX_PC 3072

static short ms_lpXis[MAX_PC];

static short ms_lpYis[MAX_PC];

static short ms_lpCis[MAX_PC];

int ms_pc = 0;

#define MAX_FC 20  

int ms_lpCodes[MAX_FC];

int ms_lpPssbs[MAX_FC];

int ms_fc = 0;

int zcsids[16] = {5,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0};

ms_fc = ZZ_RecgTuxg(

0x77007 | 0x20000000L,

              zcsids,

      NULL,

      ms_lpXis,

      ms_lpYis,

      ms_lpCis,

      ms_pc,

      ms_lpCodes,

      ms_lpPssbs,

      MAX_FC,

      NULL, NULL);

3、ZZ_DeleteLib();

函数原型：extern "C" int _declspec(dllexport)ZZ_DeleteLib();

功能描述：释放模板库占用的内存

参数说明：无

返回值说明：无





付：

识别结果里的numcode的规则是：如果numcode<0x40000L，则表示汉字，numcode的8192相当于0x4e00，[8192,8192+21003)就是那21003个汉字；29195（8192+21003)以后是生僻汉字，规则地对应到Unicode内码。如果numcode>=0x40000L，那么低字（低16位）是Unicode内码。

------------------------------------------------------------------------------*/